﻿using First_Registry.Ioc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace First_Registry
{
    public class PrismApplication : MyApplicationBase
    {
        public PrismApplication()
        {
            Resources = new ResourceDictionary();
        }

        public ResourceDictionary Resources { get; }

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            InitializeResources();
            Initialize();
            OnInitialized();
        }

        protected override void Initialize()
        {
            base.Initialize();
            // 在这里添加 PrismApplication 的初始化逻辑
        }

        protected override void OnInitialized()
        {
            base.OnInitialized();
            // 在这里添加 PrismApplication 的初始化完成后的逻辑
        }

        private void InitializeResources()
        {
            if (Resources != null)
            {
                foreach (var mergedDictionary in Resources.MergedDictionaries)
                {
                    Application.Current.Resources.MergedDictionaries.Add(mergedDictionary);
                }
            }
        }

        protected override IContainerExtension CreateContainerExtension()
        {
            // 在这里实现创建容器的逻辑
            return null;
        }

        protected override void RegisterRequiredTypes(IContainerRegistry containerRegistry)
        {
            // 在这里实现注册 Prism 需要的类型的逻辑
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // 在这里实现注册应用程序使用的类型的逻辑
        }

        protected override Window CreateShell()
        {
            // 在这里实现创建应用程序的 shell 或主窗口的逻辑
            return null;
        }

        protected override void InitializeShell(Window shell)
        {
            base.InitializeShell(shell);
            // 在这里实现初始化 shell 的逻辑
        }

        protected override void ConfigureViewModelLocator()
        {
            base.ConfigureViewModelLocator();
            // 在这里实现配置 ViewModelLocator 的逻辑
        }
    }
}
